//
//  YNManyPeopleChat.h
//  Messenger
//
//  Created by iOS on 15/3/9.
//  Copyright (c) 2015年 YN-APP-iOS. All rights reserved.
//
//  多人会话表
//
#import <UIKit/UIKit.h>
#import <Foundation/Foundation.h>
#import "YNIMFrameworkTypedef.h"

@interface YNManyPeopleChat : NSObject

//信息包id(主键)
@property (nonatomic, strong) NSString *packetId;

//发送者ID
@property (nonatomic, strong) NSString *fromUserNo;

//接收者ID
@property (nonatomic, strong) NSString *toUserNo;

//文件ID(映射FileAttr表中的主键)
@property (nonatomic, strong) NSString *fileId;

//消息类型(0:普通消息 1:图片 2：视频 3:音频 4:表情 5:地理位置 6:混合类型 (7:文件))
@property (nonatomic) int messageType;

//是否是发送(0：是  1 不是)
@property (nonatomic) int isSendMsg;

//消息内容(根据消息结构体来区分图片/文件/内容，两人/群/讨论组会话)
@property (nonatomic, strong) NSString *message;

@property (nonatomic, strong) NSString *content;

//语音ID
@property (nonatomic, strong) NSString * voiceId;

//接收时间
@property (nonatomic, strong) NSString *mTime;

//是否已读(0是未读,1是已读)
@property (nonatomic) int isReaded;

//是否发送成功(0:失败 1成功 默认0 2:发送中)
@property (nonatomic) int isSuccess;

//当前聊天所在的讨论组或群的ID
@property (nonatomic, strong) NSString *groupNo;

@property (nonatomic) int masterType;

//发送者的名字
@property (nonatomic, strong) NSString *sendName;

//具体消息内容
@property (nonatomic, strong)NSString *messageBody;

//语音状态
@property (nonatomic, assign) NSInteger voiceState;

//声音路径
@property (nonatomic, copy) NSString *voicePath;

//语音名
@property (nonatomic, strong) NSString * voiceName;

@property (nonatomic, copy) NSString *voiceDuration;//声音时间

/**
 *  jc添加-用于消息漫游判断
 *  判断最近20条信息的key值是否相同
 *  相同：表示最近20条信息是连续的，不需要拉取消息漫游信息
 *  不同：表示最近20条信息是不连续的，需要拉取消息漫游信息
 */
@property(nonatomic,strong)NSString * messageContinuousKey;


/**
 *  jc添加-c用于消息漫游判断
 *  YES: 判断最近20条信息是否都是YES
 *  YES：表示最近20条信息已经拉取过消息漫游了，不需要再次拉取消息漫游信息
 *  NO： 表示最近20条信息没有拉取过消息漫游，需要再次拉取消息漫游信息
 */
@property(nonatomic,assign)BOOL isMessageContinuous;





//消息的高度(纯消息高度, 不是整个Cell的高度, 也不是背景图片的高度)
@property (nonatomic) CGFloat messageHeight;

/**
 *  2018-11-15JC添加
 增加艾特@标识
 0:默认没有@谁   1：有人@我  2：有全体消息
 */
@property(nonatomic,assign)NSInteger aitContactMark;


/**
 *  2018-11-15JC添加
 增加@艾特谁数组
 */
@property(nonatomic,strong)NSString * aitContactMarkArray;


/**
 * JC添加-用于测回消息判断
 *  YES：撤回,NO:正常消息
 */
@property(nonatomic,assign)BOOL isMessageWithdraw;


//根据类型创建讨论组或群会话表
+ (BOOL)creatManyPeopleChatWithGroupType:(int)groupType inDatabase:(FMDatabase *)db;

//插入多人会话会话信息
- (BOOL)insertManyPeopleChatWithGroupType:(int)groupType inDatabase:(FMDatabase *)db;

//清空所有多人会话信息
+ (BOOL)deleteAllChatWithGroupType:(int)groupType inDatabase:(FMDatabase *)db;

//清空指定某个群或讨论组的会话信息
+ (BOOL)deleteManyPeopleChatWithGroupType:(int)groupType groupNo:(NSString *)groupNo inDatabase:(FMDatabase *)db;

//根据群或讨论组ID加载20条记录
+ (NSArray *)queryManyPeopleChatWithGroupTyoe:(int)groupType groupNo:(NSString *)groupNo startIndex:(NSInteger)start endIndex:(NSInteger)end isSelectSendSuccessMessage:(BOOL)selectSuccess inDatabase:(FMDatabase *)db;

//根据关键字搜索聊天记录
+ (NSArray *)queryManyPeopleChatWithGroupType:(int)groupType ByKeywords:(NSString *)keyWords groupNo:(NSString *)groupNo inDatabase:(FMDatabase *)db;


/**
 查询艾特@数据
 2018-11-16 JC添加
 @param groupType
 @param groupNo
 @param db db
 @return 返回结果
 */
+ (NSArray *)queryManyPeopleChatAitWithGroupTyoe:(int)groupType groupNo:(NSString *)groupNo inDatabase:(FMDatabase *)db;

/**
 根据groupNo查询对应该条信息
 2019-1-30 JC添加
 @param groupType
 @param groupNo
 @param db db
 @return 返回结果
 */
+ (NSArray *)queryManyPeopleChatWithGroupTyoe:(int)groupType groupNo:(NSString *)groupNo inDatabase:(FMDatabase *)db;


/**
 查询多人对话未读消息的第一条消息
 
 @param groupNo 当前聊天所在的讨论组/项目组或群的ID
 @param groupType 类型
 @param mTime 时间
 @param unReadCount 未读条数
 @param db db
 @return 返回数据
 */
+ (NSArray *)queryUnReadFirstManyPeopleChatGroupNo:(NSString *)groupNo groupType:(int)groupType unReadCount:(NSInteger)unReadCount  inDatabase:(FMDatabase *)db;

/**
 查询艾特@个人或艾特@所有人，离最新一条数据共有多少条数据
 2018-11-16 JC添加
 
 @param groupType
 @param groupNo
 @param aitContactMark 1：艾特@自己，2：艾特所有人
 @param db db
 @return 返回结果
 */
+(NSInteger)queryManyPeopleChatAitCountWithGroupTyoe:(int)groupType groupNo:(NSString *)groupNo ynmanyPeopleChat:(YNManyPeopleChat*)ynmanyPeopleChat inDatabase:(FMDatabase *)db;


/**
 修改艾特@数据为默认数据0
 2018-11-16 JC添加
 @param groupType
 @param groupNo
 @param db db
 */
+ (BOOL)updateManyPeopleChatAitWithGroupTyoe:(int)groupType groupNo:(NSString *)groupNo inDatabase:(FMDatabase *)db;


/**
 用于消息漫游判断
 查询最近多少条信息
 
 @param groupNo 讨论组、群、组织机构id
 @param groupType 讨论组、群、组织机构类型
 @param sendTime 保存时间
 @param numberCount 多少条数据
 @param db db
 @return 返回结果
 */
+(NSArray *)queryManPeopleChatTopInfoWithGroupNo:(NSString *)groupNo GroupType:(int)groupType mTime:(NSString *)mTime numberCount:(NSInteger)numberCount Database:(FMDatabase *)db;

/**
 JC修改群，讨论组，项目组撤回状态
 
 @param packetId 消息id
 @param groupType
 @param db db
 @return
 */
+(BOOL)updateManyPeopleMessageWithdrawWithPacketId:(NSString *)packetId groupType:(int)groupType inDatabase:(FMDatabase *)db;

//--------------------------------------//-----------------------------------//------------------------------//-------------------------------//

//更新会话
+ (BOOL)updateManyPeopleChatTableWithMessageID:(NSString *)messageID sendTime:(NSString *)sendTime groupType:(int)groupType isSuccess:(int)messageState inDatabase:(FMDatabase *)db;

+ (BOOL)updateManyPeopleChatTableWithMessageID:(NSString *)messageID messageHeight:(CGFloat)messageHeight groupType:(int)groupType inDatabase:(FMDatabase *)db;

//只更新状态
+ (BOOL)updateMessageSendingStateWithDatabase:(FMDatabase *)db;

//根据消息的ID清除数据库里面对应的消息
+ (BOOL)deleteAMessageFromDatabaseWithMessageID:(NSString *)messageID groupType:(int)groupType inDatabase:(FMDatabase *)db;

#pragma mark asset Url

//文件名
@property (nonatomic, strong) NSString *fileName;

//原图路径
@property (nonatomic, strong) NSString *originPhotoUrl;

//文件路径
@property (nonatomic, strong) NSString *fileUrl;

//更新消息的图片名字, 原图路径, 消息高度
+ (BOOL)updateMessageWithMessageID:(NSString *)messageID
                    originPhotoUrl:(NSString *)originUrl
                          fileName:(NSString *)fileName
                     messageHeight:(CGFloat)messageHeight
                         groupType:(int)groupType
                        inDatabase:(FMDatabase *)db;

//文件状态
@property (nonatomic, assign) NSInteger fileState;

//更改文件状态
+ (BOOL)updateMessageFileStateWithMessageID:(NSString *)messageID fileState:(NSInteger)fileState groupType:(int)groupType inDataBase:(FMDatabase *)db;

/**
 *  更改语音状态
 *
 *  @param messageID 消息ID
 *  @param groupType 分组类型
 *  @param db        db
 *
 *  @return 返回参数
 */
+ (BOOL)updateMessageVoiceStateWithMessageID:(NSString *)messageID  groupType:(int)groupType inDataBase:(FMDatabase *)db;

@end
